import java.util.concurrent.Semaphore;

/**
 * Semaphore
 *  Semaphore 是一个计数信号量, 它允许多个线程同时访问的资源,
 *  但是当资源已经释放时, 线程不能再申请资源, 否则会阻塞.
 *  线程申请资源时, 如果资源已经释放, 则申请成功, 否则会阻塞.
 *  线程释放资源时, 如果资源已经释放, 则释放成功, 否则会阻塞.
 *  Semaphore 的作用是控制访问的资源, 避免资源冲突.
 */
public class Semaphore1 {
    public static void main(String[] args) throws InterruptedException {
        Semaphore semaphore = new Semaphore(5);

        //  P 操作, 申请资源
        semaphore.acquire();
        System.out.println("P 操作");
        semaphore.acquire();
        System.out.println("P 操作");
        semaphore.acquire();
        System.out.println("P 操作");
        semaphore.acquire();
        System.out.println("P 操作");
        semaphore.acquire();
        System.out.println("P 操作");

        //  V 操作, 释放资源
        semaphore.release();
        System.out.println("V 操作");

        semaphore.acquire();
        System.out.println("P 操作");




    }
}
